ساخت ساعت دیجیتالی با امکان انتخاب ساعت ، دقیقه ، ثانیه و تغییر هر کدام از آنها
پیغام مدیر :
با سلام خدمت شما بازديدكننده گرامي ، خوش آمدید به سایت من . لطفا براي هرچه بهتر شدن مطالب اين وب سایت ، ما را از نظرات و پيشنهادات خود آگاه سازيد و به ما را در بهتر شدن كيفيت مطالب ياري کنید.
بازدید : 1136
نویسنده : فرزاد قاسم پور

با عرض سلام و وقت بخیر خدمت دوستان گرام.

پروژه دوم درس استاد نورمحمدی(ریزپردازنده): ساخت ساعت دیجیتالی با امکان انتخاب ساعت ، دقیقه ، ثانیه و تغییر هر کدام از آنها.

 

المانهای مورد نیاز:

1-میکرو کنترلر Atmega32

2-شش عدد سون سگمنت کاتد مشترک

3-شش عدد ترانزیستور BC546

4-هشت عدد مقاومت 220 اهم

5-شش عدد مقاومت 10 اهم

7-کریستال 11.0592Mhz

8-چهار عدد LED(رنگ دلخواه)

9-خازن 220mF – 16v

10-دو عدد کلید فشاری(Push Button)

 

توضیح عملکرد مدار:

سون سگمنت ها که توسط PORTA مقداردهی میشوند (به روش T.D.M) که برای انتخاب سون سگمنت مورد نظر از PORTD استفاده میکنیم.

کلید فشاریی که به PORTC.1 متصل شده برای انتخاب یکی از قسمتهای ساعت ، دقیقه یا ثانیه بکار میرود.

کلید دوم که به PORTC.3 متصل شده وقتی کاربرد دارد که توسط کلید اول یکی از قسمتهای ساعت (ساعت،دقیقه،ثانیه)انتخاب شده باشد که برای افزایش مقدار آن بکار میرود.

البته برنامه ای که بنده نوشته ام به هیچ عنوان بهینه نیست ، خواهشمندم هر کدام از دوستانی که برنامه را نگاه میکنند(یا استفاده) حتما مشکلش را پیدا کرده و در قسمت نظرات بنویسند.(البته خودم پیداش کردم ولی هنوز درستش نکردم به محض درست شدن برنامه جدید رو براتون میذارم).

توصیه: مطمئنا با تفکر بر روی این برنامه رمز خواندن کلیدها ، همزمان با روش T.D.M را خواهید فهمید(راهنمایی:مشکل این برنامه در خواندن کلید هاست و راهنمایی دوم اینکه روش T.D.M را باید به طریق دیگری پیاده سازی کرد).

موفق باشید

 

شماتیک مدار رو از لینک زیر بردارید:

http://www.up.ma/images/2ptq872sazwfaxcjbzo9.jpg

 

اینم برنامش:

 


 

#include <delay.h>

#include <mega32.h>

#include <stdlib.h>

    int a,b,c,d,e,f,i,j,x;

    char number[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF}; // BCD for katod moshtarak

    unsigned char key,tim1,en1,en2,en3,s=0;

void main(void)

{

    DDRA=0x7f;  DDRD=0x3f; DDRC=0xf5;

    a=0;b=5;c=9;d=5;e=3;f=2;

    DDRC.1=0; PORTC.1=1;

    DDRC.3=0; PORTC.3=1;

 

    x=10; tim1=x; j=900;

    TCCR0=0x02;

    TCNT0=131;

    TIMSK=0x01;

    #asm("sei")  

   

    en1=1;en2=1;en3=1;   

    while(1)

    {

        delay_ms(10);

        while(PINC.1 != 0)

        {

            if(s>0)

            {

                key=1; key=PINC.3; delay_ms(8);

                if(key==0)

                {

                    if(s==1)

                    {

                        a++;

                        if(a>9)

                        {

                            a=0;

                            b++;

                            if(b*10+a>=60)

                                b=0;

                        }       

                    }

                    if(s==2)

                    {

                        c++;

                        if(c>9)

                        {

                            c=0;

                            d++;

                            if(d*10+c>=60)

                                d=0;

                        }           

                    }  

                    if(s==3)

                    {

                        e++;

                        if((e>9)|(f>=2 & e>=4))

                        {

                            e=0;

                            f++;

                            if((f*10+e>=24)|(f>2))

                            {

                                f=0; e=0;

                            }  

                        }            

                    }

                } // key==0  

            }//s>0           

        } // while

             

        delay_ms(10);   

        s++; 

  

        if(s>0 & j!=400)

            j=400;

        if(s==1) 

        {

            en1=1;

            en2=0;

            en3=0;

        }     

        else

        if(s==2)

        {

            en2=1;

            en1=0;

            en3=0; 

        }   

        else

        if(s==3)

        {

            en3=1;

            en1=0;

            en2=0;

        } 

        else

        if(s>=4)

        {  

            j=900;

            s=0;

            en1=1;

            en2=1;

            en3=1;

        }

 

    }                      

                                                

    

}// end of main

 

 

interrupt [TIM0_OVF] void T0_isr(void)

{

    TCNT0=131; 

    tim1--;

    if(tim1==0)

    {

        tim1=x;  

        if((en1==1)&(en2==1)&(en3==1))

            PORTC.0=!PORTC.0;

        else

            PORTC.0=0;

        

       for(i=0;i<=j;i++)

        {

            if(en1==1)

            {

                PORTD=0x01; PORTA=number[a];delay_ms(2);

                PORTD=0x02; PORTA=number[b];delay_ms(2);

            }

            if(en2==1)

            {     

                PORTD=0x04; PORTA=number[c];delay_ms(2);

                PORTD=0x08; PORTA=number[d];delay_ms(2);

            }    

            if(en3==1)

            {      

                PORTD=0x10; PORTA=number[e];delay_ms(2);

                PORTD=0x20; PORTA=number[f];delay_ms(2);

            }

        if(s==0 & PINC.1==0)

        {

            if(j!=400)

                j=400;

            en1=1;

            en2=0;

            en3=0;

        }          

        } // end of for

        if(en1==1 & en2==1 & en3==1)

        {

            a++;

            if(a>9){a=0; b++;

                if(b>=6){b=0; c++;

                    if(c>9){c=0; d++;

                        if(d>=6){d=0; e++;

                            if((e>9)|(f>=2 & e>=4)){e=0; f++;

                                if((f>=2 & e>=4)|(f>2))

                                {    f=0; e=0;  }

            }   }   }   }   } 

        }  

           

    }   

  

} // end of interrupt

 






مطالب مرتبط با این پست
.



می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه: